package com.cky.software.weiyu.pay;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author wales
 * <p>
 * 简单版商品购物流程 - version 1
 *
 * <ul>
 *     <li> 1. 注册和登录 </li>
 *     <li> 2. </li>
 * </ul>
 */
public class PayVersion1 {

    // 注册的用户名和密码的预准备字段
    public static String name = "";
    public static String pwd = "";

    // 商品清单 Map
    static Map<String, Object> shopMap = new HashMap<>();

    // 购物车清单 Map
    static Map<String, Object> payMap = new HashMap<>();

    // 下单支付清单 Map
    static Map<String, Object> checkMap = new HashMap<>();

    public static void main(String[] args) {
        register();
        login();
        shopList();
        payList();
        check();
        result();
    }

    // 1. 注册
    public static void register() {
        name = "WEI_YU";
        pwd = "123123";
        System.out.println("---> 1. 注册成功 !");
    }

    // 2. 登录
    public static void login() {
        String inputName = "CKY";
        String inputPwd = "CKYPWD";

        if (inputName.equals(name)) {
            System.out.println("---> 2.1. 用户存在 ");
            if (inputPwd.equals(pwd)) {
                System.out.println("---> 2.2. 登录成功 ");
            } else {
                System.out.println("---> 2.2. 密码输入错误 ");
            }
        } else {
            System.out.println("---> 2.1. 用户不存在 ");
        }
    }

    // 3. 商品列表
    public static void shopList() {

        // 通过全局变量 shopMap 存入以下4组数据
        shopMap.put("苹果", 16.2);
        shopMap.put("香蕉", 8);
        shopMap.put("猪肉", 15);
        shopMap.put("牛肉", 40);
        System.out.println("---> 3. 商品列表: " + shopMap);
    }

    // 4. 购物车列表
    public static void payList() {

        // 初始化 List
        List<String> list = new ArrayList<>();

        // 循环遍历 shopMap 中的数据
        for (Map.Entry<String, Object> keys : shopMap.entrySet()) {
            if (keys.getKey().equals("苹果")) {

                // 将 shopMap 中为苹果的数据存入全局变量 payMap 中
                payMap.put(keys.getKey(), keys.getValue());

                // 加入购物车Map后，将原商品列表的商品删掉，先放入 List 容器
                list.add(keys.getKey());
            } else if (keys.getKey().equals("猪肉")) {
                payMap.put(keys.getKey(), keys.getValue());
                list.add(keys.getKey());
            }
        }

        // 取出 List 容器中的待删除列表
        shopMap.remove(list.get(0));
        shopMap.remove(list.get(1));

        System.out.println("---> 4.1. 购物车: " + payMap);
        System.out.println("---> 4.2. 商品列表: " + shopMap);
    }

    // 5. 下单支付方法
    public static void check() {

        // 初始化 List 用作存储待删除的数据
        List<String> list = new ArrayList<>();

        // 循环遍历全局变量 payMap 的数据
        for (Map.Entry<String, Object> keys : payMap.entrySet()) {
            if (keys.getKey().equals("猪肉")) {

                // 将 payMap 容器中为 猪肉 的数据存入 全局变量 checkMap 中
                checkMap.put(keys.getKey(), keys.getValue());

                // 存储到 checkMap 下单支付后，需要将该商品从原商品列表移除，需要先用 List 存入待删除的数据
                list.add(keys.getKey());
            }
        }

        // 通过获取 List 中的数据来删除 payMap 中的数据
        payMap.remove(list.get(0));

        System.out.println("---> 5.1. 下单支付: " + checkMap);
        System.out.println("---> 5.2. 购物车: " + payMap);
    }

    // 6. 打印已购清单
    public static void result() {
        System.out.println("---> 6. 票据: " + checkMap);
    }
}
